{"version":3,"file":"static/chunks/pages/locations/[...slug]-c85248da9bc689fc.js","mappings":"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","sources":["webpack://_N_E/?55c1","webpack://_N_E/../../libs/osc/breadcrumbs/src/lib/breadcrumbs.tsx","webpack://_N_E/../../libs/osc/breadcrumbs/src/index.ts","webpack://_N_E/./components/breadcrumbs/breadcrumbs.tsx","webpack://_N_E/./components/breadcrumbs/index.ts","webpack://_N_E/./components/about-locations/about-locations-page.tsx","webpack://_N_E/../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_trimmedEndIndex.js","webpack://_N_E/./utils/seo-schema-utils.ts","webpack://_N_E/./components/interlinks/interlinks.tsx","webpack://_N_E/./components/interlinks/index.ts","webpack://_N_E/./hooks/use-get-dream-page-attributes.ts","webpack://_N_E/./hooks/use-hotel-sort.ts","webpack://_N_E/./components/locations-page/locations-page.tsx","webpack://_N_E/./components/locations-page/index.ts","webpack://_N_E/./pages/locations/[...slug]/index.tsx","webpack://_N_E/../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toNumber.js","webpack://_N_E/../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseTrim.js","webpack://_N_E/./components/about-locations/about-locations-page.module.css","webpack://_N_E/../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/now.js","webpack://_N_E/../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/debounce.js"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/locations/[...slug]\",\n function () {\n return require(\"private-next-pages/locations/[...slug]/index.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/locations/[...slug]\"])\n });\n }\n ","import { useTranslation } from 'next-i18next';\n\nexport type BreadcrumbsProps = {\n /** A list of breadcrumbs to display */\n breadcrumbs?: { name?: string | null; uri?: string | null }[];\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport const Breadcrumbs = ({ breadcrumbs, ...rest }: BreadcrumbsProps) => {\n const { t } = useTranslation('osc-breadcrumbs');\n\n if (!breadcrumbs?.length) return null;\n\n return (\n <nav aria-label={t('breadcrumb')} data-testid=\"osc-breadcrumbs\" {...rest}>\n <ol className=\"flex flex-wrap text-xs text-text-alt md:text-sm\">\n {breadcrumbs.map((breadcrumb, idx) => {\n const isLastBreadcrumb = idx === breadcrumbs.length - 1;\n return (\n <li key={breadcrumb.uri}>\n {isLastBreadcrumb ? (\n <a aria-current=\"page\" href={breadcrumb.uri || ''}>\n {breadcrumb.name}\n </a>\n ) : (\n <>\n <a className=\"underline\" href={breadcrumb.uri || ''}>\n {breadcrumb.name}\n </a>\n <span aria-hidden={true} className=\"mx-2\">\n /\n </span>\n </>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n\nexport default Breadcrumbs;\n","export * from './lib/breadcrumbs';\n","import { useWrappedRouter } from '../../hooks';\nimport { Breadcrumbs as OSCBreadCrumbs } from '@dx-ui/osc-breadcrumbs';\n\ntype BreadcrumbsProps = {\n breadcrumbs: { name: string; uri: string }[];\n};\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const { router } = useWrappedRouter();\n\n if (breadcrumbs.length === 0) return null;\n\n const breadCrumbs = breadcrumbs?.map((bc) => ({\n name: bc.name,\n uri: `/${router.locale}${bc.uri}`,\n }));\n return <OSCBreadCrumbs breadcrumbs={breadCrumbs} />;\n};\n","export * from './breadcrumbs';\n","import styles from './about-locations-page.module.css';\nimport type { LocationAbout } from '@dx-ui/queries-dx-shop-search-ui';\nimport cx from 'classnames';\n\ntype AboutLocationsPageProp = {\n about?: LocationAbout | null;\n aboutClassName?: string;\n contentBlockClassName?: string;\n descriptionClassName?: string;\n titleClassName?: string;\n};\n\nexport const AboutLocationsPage = ({\n about,\n aboutClassName,\n contentBlockClassName,\n descriptionClassName,\n titleClassName,\n}: AboutLocationsPageProp) => {\n let descIndex = 0;\n let orderedListIndex = 0;\n let unOrderedListIndex = 0;\n if (about && about?.contentBlocks?.length > 0) {\n return (\n <div className={cx(styles.container, aboutClassName)} data-testid=\"about-contentBlocks\">\n {about?.contentBlocks?.map((contentBlock) => {\n const title = contentBlock?.title ? `<h2>${contentBlock?.title}</h2>` : null;\n return title ? (\n <div key={`content-block-${contentBlock?.title}`} className={contentBlockClassName}>\n <div\n className={cx(\n {\n 'text-primary text-base font-bold': !titleClassName,\n },\n titleClassName\n )}\n dangerouslySetInnerHTML={{ __html: title }}\n />\n {contentBlock.descriptions?.map((description) => {\n return description ? (\n <div\n className={cx(\n {\n 'p-2 text-xs': !descriptionClassName,\n },\n descriptionClassName\n )}\n dangerouslySetInnerHTML={{ __html: description }}\n key={`content-title-${descIndex++}`}\n />\n ) : null;\n })}\n {contentBlock?.orderedList?.map((orderedList) => {\n return orderedList ? (\n <div\n className=\"p-2 text-xs\"\n dangerouslySetInnerHTML={{ __html: orderedList }}\n key={`contentBlock-orderedList-${orderedListIndex++}`}\n />\n ) : null;\n })}\n {contentBlock?.unorderedList?.map((unorderedList) => {\n return unorderedList ? (\n <div\n className=\"p-2 text-xs\"\n dangerouslySetInnerHTML={{ __html: unorderedList }}\n key={`contentBlock-orderedList-${unOrderedListIndex++}`}\n />\n ) : null;\n })}\n </div>\n ) : null;\n })}\n </div>\n );\n }\n return null;\n};\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","import type { HotelAmenityOption, Maybe } from '@dx-ui/gql-types';\nimport type { HotelType } from '../providers/app-provider/app-provider.types';\nimport getOptimizedImages from './get-optimized-images';\nimport { getLeadRateAvailStatus } from '../components/hotel-card/utils/hotel-lead-rate-utils';\n\nexport type Breadcrumbs = {\n uri: string;\n name: string;\n};\n\ntype GetSeoSchemaParams = {\n breadcrumbs?: Breadcrumbs[];\n baseUrl: string;\n language: string;\n hotels?: HotelType[];\n amenities?: Pick<HotelAmenityOption, 'name' | 'id'>[];\n};\n\ntype ImageWithRatios = {\n altText?: Maybe<string>;\n ratios: { url?: Maybe<string> }[];\n};\ntype ImageWithVariants = {\n altText?: Maybe<string>;\n variants: { url?: Maybe<string>; size: 'xs' | 'sm' | 'md' }[];\n};\n\nconst getImageUrl = (image: ImageWithRatios | ImageWithVariants) => {\n return 'ratios' in image ? image.ratios[0]?.url : getOptimizedImages(image.variants, 'xs');\n};\n\nexport const SEO_IMAGES = 3;\nconst getHotelSeoImages = (\n hotelImages: HotelType['images'] | null | undefined,\n imagesWanted: number\n) => {\n if (!hotelImages) return [];\n\n const primaryImages = Array.isArray(hotelImages.carousel)\n ? hotelImages.carousel.slice(0, imagesWanted).map((image) => getImageUrl(image))\n : [];\n\n if (primaryImages.length === 0 && hotelImages.master) {\n return [getImageUrl(hotelImages.master)];\n }\n return primaryImages;\n};\n\nexport const SEO_AMENITIES = 1;\nconst getTopThreeAmenities = (\n hotel: HotelType,\n amenities: Pick<HotelAmenityOption, 'name' | 'id'>[]\n) => {\n const topAmenities: { '@type': string; name: string }[] = [];\n for (const amenity of amenities) {\n if (hotel.amenityIds.includes(amenity.id)) {\n topAmenities.push({\n '@type': 'LocationFeatureSpecification',\n name: amenity.name,\n });\n if (topAmenities.length === SEO_AMENITIES) break;\n }\n }\n\n return topAmenities; // Return the array of top amenities for this hotel\n};\n\nexport const getSeoSchema = ({\n breadcrumbs,\n baseUrl,\n language,\n hotels,\n amenities,\n}: GetSeoSchemaParams) => {\n if (!breadcrumbs || !breadcrumbs.length) return '';\n\n const breadcrumbItemListElements = breadcrumbs.map((breadcrumb, index) => ({\n '@type': 'ListItem',\n position: index + 1,\n item: {\n '@id': `${baseUrl}${language}${breadcrumb.uri}`,\n name: breadcrumb.name,\n },\n }));\n const hotelItemListElements = (hotels ?? [])\n .slice(0, 20)\n .filter((hotel) => getLeadRateAvailStatus(hotel.display, hotel.leadRate) === 'AVAILABLE')\n .map((hotel, index) => {\n return {\n '@type': 'ListItem',\n position: index + 1,\n item: {\n '@type': 'Hotel',\n name: hotel.name,\n image: getHotelSeoImages(hotel.images, SEO_IMAGES),\n offers: {\n '@type': 'Offer',\n price: hotel.leadRate?.lowest?.rateAmount,\n priceCurrency: hotel.localization?.currencyCode,\n },\n amenityFeature: getTopThreeAmenities(hotel, amenities ?? []),\n url: hotel.facilityOverview?.homeUrlTemplate,\n },\n };\n });\n\n const seoSchema = {\n '@context': 'https://schema.org',\n '@graph': [\n {\n '@type': 'BreadcrumbList',\n itemListElement: breadcrumbItemListElements,\n },\n ...(hotelItemListElements.length > 0\n ? [\n {\n '@type': 'ItemList',\n itemListElement: hotelItemListElements,\n },\n ]\n : []),\n ],\n };\n return JSON.stringify(seoSchema);\n};\n","import { env } from '../../constants';\nimport { useMetrics, useWrappedRouter } from '../../hooks';\nimport { Accordion } from '@dx-ui/osc-accordion';\n\ntype Interlink = {\n name: string;\n uri: string;\n};\n\ntype InterlinksProps = {\n interlinks?: Interlink[];\n interlinkTitle?: string;\n index?: string;\n};\n\nexport const Interlinks = ({ interlinks, interlinkTitle }: InterlinksProps) => {\n const metrics = useMetrics();\n const location_interlinks = interlinks || [];\n const { router } = useWrappedRouter();\n\n const handleInterlinkMetricsOnClick = (linkItemName?: string) => {\n if (interlinkTitle) {\n let data = '';\n if (interlinkTitle.indexOf('by') > -1)\n data = interlinkTitle.substring(interlinkTitle.indexOf('by') + 3);\n if (interlinkTitle.indexOf('near') > -1)\n data = interlinkTitle.substring(interlinkTitle.indexOf('near') + 5);\n const formattedLinkItemName = data.split(' ')[0];\n metrics.trackInterlinksTitleClick(\n linkItemName && formattedLinkItemName\n ? `${formattedLinkItemName}:${linkItemName}`\n : formattedLinkItemName ?? ''\n );\n }\n };\n\n const interLinkTitle = () => (\n <h3 className=\"font-sans text-base font-bold text-primary\">\n <span dangerouslySetInnerHTML={{ __html: interlinkTitle || '' }} />\n </h3>\n );\n return (\n <div className=\"border-b border-border py-4\" data-testid=\"location-interlinks\">\n <Accordion\n className=\"accordion-stacked bg-transparent p-0 text-left font-sans font-bold\"\n items={[\n {\n key: 'location-interlinks',\n content: (\n <section>\n <ol\n className=\"grid list-none grid-cols-2 gap-2 pt-4 md:grid-cols-3\"\n data-testid=\"interLinkList\"\n >\n {location_interlinks.map((linkItem) => (\n <li className=\"inline-block pb-4\" key={linkItem.name}>\n <a\n className=\"inline-block font-normal text-primary no-underline \"\n data-testid={`interLink ${linkItem.name}`}\n href={`${env.OHW_BASE_URL}${router.locale}/${linkItem.uri}`}\n onClick={() => handleInterlinkMetricsOnClick(linkItem.name)}\n >\n {linkItem.name}\n </a>\n </li>\n ))}\n </ol>\n </section>\n ),\n collapsedButtonLabel: interLinkTitle(),\n expandedButtonLabel: interLinkTitle(),\n },\n ]}\n type=\"multiple\"\n variant=\"stacked\"\n />\n </div>\n );\n};\n","export * from './interlinks';\n","import { useMemo, useEffect } from 'react';\nimport type {\n HotelSummaryOptions_GeocodePageQuery,\n LocationCategory,\n Maybe,\n} from '@dx-ui/queries-dx-shop-search-ui';\nimport { useFeatureToggleConfig } from './use-feature-toggle';\nimport type { PageType } from '../utils';\nimport { getPageType } from '../utils';\nimport { useWrappedRouter } from './use-wrapped-router';\nimport { useAppDispatch } from '../providers/app-provider';\n\ntype PageAttributes = {\n categoryId?: Maybe<LocationCategory | 'resort'>;\n categoryName?: string;\n isCategoryAmenity?: boolean;\n isGlobalPage?: boolean;\n isResortPage?: boolean;\n};\nconst defaultDreamPageAttibutes: PageAttributes = {\n categoryId: undefined,\n categoryName: '',\n isCategoryAmenity: false,\n isGlobalPage: false,\n isResortPage: false,\n};\ntype DreamAttributesConfig = {\n id?: Maybe<LocationCategory | 'resort'>;\n slug?: string;\n singularDisplay?: string;\n pluralDisplay?: string;\n breadcrumbDisplay?: string;\n amenityIds?: string[];\n categoryIds?: string[];\n};\n\nexport const useGetDreamPageAttributes = (\n data: NonNullable<HotelSummaryOptions_GeocodePageQuery['geocodePage']>['location'] | undefined\n) => {\n const dreamPageAttributesConfig = useFeatureToggleConfig('config-dream-attributes');\n const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n const dispatch = useAppDispatch();\n\n const dreamPageAttributes = useMemo(() => {\n const pageAttributes: PageAttributes = {\n ...defaultDreamPageAttibutes,\n isGlobalPage: !!data?.globalBounds,\n };\n\n if (dreamPageAttributesConfig?.enabled) {\n const category = data?.category;\n if (category || queryParameters?.activeFiltersState?.amenityFilters?.length) {\n const dreamAttributes: DreamAttributesConfig[] = Object.values(\n dreamPageAttributesConfig?.config ?? {}\n );\n const categoryOrAmenity = dreamAttributes?.find(\n (config) =>\n config?.id === category ||\n queryParameters?.activeFiltersState?.amenityFilters.includes(config.id ?? '')\n );\n pageAttributes.isCategoryAmenity = !!categoryOrAmenity;\n pageAttributes.isResortPage = category === 'resort';\n pageAttributes.categoryId = categoryOrAmenity?.id;\n pageAttributes.categoryName = pageAttributes.isResortPage\n ? categoryOrAmenity?.pluralDisplay\n : categoryOrAmenity?.singularDisplay;\n }\n }\n return pageAttributes;\n }, [\n data?.category,\n data?.globalBounds,\n dreamPageAttributesConfig?.config,\n dreamPageAttributesConfig?.enabled,\n queryParameters?.activeFiltersState?.amenityFilters,\n ]);\n\n useEffect(() => {\n //set pageType\n const pageType: PageType = getPageType(router.asPath, queryParameters);\n pageType.isGlobal = !!dreamPageAttributes.isGlobalPage;\n pageType.isResorts = !!dreamPageAttributes.isResortPage;\n pageType.isCategoryAmenity = !!dreamPageAttributes.isCategoryAmenity;\n pageType.isBrand = !!data?.brandCode;\n dispatch({ type: 'SET_PAGE_TYPES', payload: pageType });\n }, [data, dispatch, dreamPageAttributes, queryParameters, router.asPath]);\n\n return { pageAttributes: dreamPageAttributes };\n};\n","import type { HotelType } from '../providers/app-provider/app-provider.types';\nimport type { GoogleCoordinate } from '../utils';\nimport { sortHotels } from '../utils';\nimport { useState, useEffect } from 'react';\n\nlet worker: Worker;\n\nif (typeof window !== 'undefined' && typeof Worker !== 'undefined' && import.meta.url) {\n worker = new Worker(new URL('../utils/hotel-sort-worker.ts', import.meta.url));\n}\nexport const useSortHotels = (\n sortType: string | null,\n brandCode: string | undefined,\n hotels: HotelType[],\n centerCoordinate: GoogleCoordinate | null\n) => {\n const [sortedHotels, setSortedHotels] = useState<HotelType[]>([]);\n\n useEffect(() => {\n const fetchData = () => {\n try {\n if (worker) {\n worker.postMessage({\n sortType,\n brandCode,\n hotels,\n centerCoordinate,\n });\n\n const handleMessage = (event: { data: HotelType[] }) => {\n setSortedHotels(event.data);\n };\n\n worker.addEventListener('message', handleMessage);\n\n return () => {\n worker.removeEventListener('message', handleMessage);\n };\n } else {\n // If Web Worker is not available, call the function directly\n setSortedHotels(sortHotels(sortType, brandCode, hotels, centerCoordinate));\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error in useSortHotels (Web Worker):', e);\n // On Error, call the function directly\n setSortedHotels(sortHotels(sortType, brandCode, hotels, centerCoordinate));\n }\n };\n void fetchData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sortType, brandCode, hotels.length, centerCoordinate]);\n return sortedHotels.length\n ? sortedHotels\n : sortHotels(sortType, brandCode, hotels, centerCoordinate);\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\n\nimport * as React from 'react';\nimport { MetaData } from '../meta-data';\nimport Footer from '../../components/footer';\nimport {\n env,\n GOALS,\n MAX_PROPERTIES_PER_LIST_VIEW_PAGE,\n CHANGE_DEFAULT_SORT_WHEN_USING_POINTS,\n VARIANTS,\n} from '../../constants';\nimport cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport debounce from 'lodash/debounce';\nimport { Filters, HotelDetails } from '../dynamic-components';\nimport { getSeoSchema } from '../../utils/seo-schema-utils';\nimport { PlacesSearch } from '../places-search';\nimport {\n useMetrics,\n useWrappedRouter,\n useGetDreamPageData,\n useGetFilteredHotels,\n useFeatureToggleConfig,\n useGetMVTSelections,\n useMapListToggle,\n} from '../../hooks';\nimport { CurrencyConverter } from '../currency-converter/currency-converter';\nimport { useAuth } from '@dx-ui/framework-auth-provider';\nimport { useInitializeConductrics } from '../../hooks/use-initialize-conductrics';\nimport { SortByDropDown } from '../sort-by-drop-down';\nimport { SearchHeader } from '../search-header';\nimport { useLocation } from '@dx-ui/framework-location-provider';\nimport useHotelSummaryOptions from '../../hooks/use-hotel-summary-options/use-hotel-summary-options';\nimport { hashHotelSummaryOptionsData } from '../../hooks/use-hotel-summary-options/utils/get-hashed-hotel-summary-options-data-from-cache';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport type { ActiveFiltersState } from '../filters/filter.constants';\nimport { initializeActiveFiltersState } from '../filters/filter-utils';\nimport {\n getSortType,\n getSessionState,\n SORTBY_DROP_DOWN,\n type SortByDropDownValues,\n} from '../../utils';\nimport { AboutLocationsPage } from '../about-locations/about-locations-page';\nimport { UsePoints } from '../use-points/use-points';\nimport { Interlinks } from '../interlinks';\nimport type { LocationPageInterlink } from '@dx-ui/queries-dx-shop-search-ui';\nimport { sendReward, useConductricsSelection } from '@dx-ui/framework-conductrics';\nimport { ListView } from '../list-view/list-view';\nimport isEqual from 'lodash/isEqual';\nimport { Breadcrumbs } from '../breadcrumbs';\nimport { useGetDreamPageAttributes } from '../../hooks/use-get-dream-page-attributes';\nimport { useSortHotels } from '../../hooks/use-hotel-sort';\nimport { applyFiltersToHotel } from '../../providers/app-provider/app-provider.utils';\nimport { useCoordsFromParams } from '../../hooks/use-coords-from-params';\nimport { useIsClient } from 'usehooks-ts';\nimport { useRef } from 'react';\nimport { CompareHotelsToggle } from '../compare-hotels/compare-toggle';\nimport { CompareBar } from '../compare-hotels/compare-bar';\nimport { useFilterState } from '../../providers/filter-provider';\nimport { HotelSearchResultSummaryPanel } from '../hotel-search-result-summary/hotel-search-result-summary';\nimport { Accordion } from '@dx-ui/osc-accordion';\nimport { useVerticalSpaceMVT } from '../../hooks/use-vertical-space-MVT';\nimport { TaxonomyList } from '@dx-ui/osc-taxonomy-list';\nimport { SuggestedFilterButtons } from '../filters/suggested-filters';\nimport { MapBlock } from '../map/map-block';\nimport { updateMapBounds } from '../map/map.utils';\n\ntype LocationsPageProps = {\n initialBounds: google.maps.LatLngBoundsLiteral;\n path: string;\n};\n\nexport const LocationsPage = ({ initialBounds: initBounds, path }: LocationsPageProps) => {\n const { selectedCtyhocn, selectedCurrency, isListVisible, sortType, shouldUsePoints, pageType } =\n useAppState();\n const activeFiltersState = useFilterState();\n const isClient = useIsClient();\n\n const dispatch = useAppDispatch();\n\n const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n const { shouldUseParamCoords } = useCoordsFromParams();\n\n const [locationQueryPath, setLocationQueryPath] = React.useState(path);\n const { t } = useTranslation([\n 'hotel-card',\n 'locations-page',\n 'sort-by-drop-down',\n 'footer',\n 'hotel-counter-text',\n ]);\n const metrics = useMetrics();\n const { guestInfo, isLoading: isAuthLoading, isAuthenticated } = useAuth();\n\n const {\n data,\n locationPath,\n bounds: initialBounds,\n isLoading: isLocationPageHSOLoading,\n initHotelCount,\n locationMatchName,\n regionMatchName,\n } = useGetDreamPageData();\n\n const { enabled: blobPocToggleEnabled } = useFeatureToggleConfig('NHCSEARCH-4655-blob-poc');\n\n const { pageAttributes } = useGetDreamPageAttributes(data?.location);\n\n const { categoryId, categoryName, isGlobalPage, isCategoryAmenity } = pageAttributes;\n const brandName =\n data?.hotelSummaryOptions?.brands?.find((brand) => brand.code === data?.location?.brandCode)\n ?.name || '';\n const brandCode = data?.location?.brandCode || '';\n const totalSize = data?.hotelSummaryOptions?._hotels?.totalSize || 0;\n const initialHashedHotelData = hashHotelSummaryOptionsData(data, {});\n const [mapBounds, setMapBounds] = React.useState<google.maps.LatLngBoundsLiteral>(initBounds);\n const [mapCenter, setMapCenter] = React.useState<google.maps.LatLngLiteral | undefined>();\n\n const isInitialRender = React.useRef(true);\n const allQuadNodesLoaded = React.useRef(true);\n const boundsChangeCount = React.useRef(0);\n const hotelCounterRef = useRef<HTMLDivElement>(null);\n\n const isCountryOrState = ['country', 'state', 'region'].includes(data?.match?.type || '');\n const { hashedHotelSummaryOptionsHotelData, isFetching: isHotelSummaryOptionsLoading } =\n useHotelSummaryOptions({\n initialHashedHotelSummaryOptionsData: initialHashedHotelData,\n bounds: mapBounds,\n brandCode: pageType.isPageBrandFilterEnabled ? brandCode : undefined,\n language: 'en',\n address: boundsChangeCount.current < 2 && isCountryOrState ? data?.match?.address : undefined,\n type: data?.match?.type,\n isInitialRender,\n matchName: regionMatchName,\n blobEnabled: blobPocToggleEnabled,\n hotelSummaryExtractUrl: data?.location?.hotelSummaryExtractUrl || '',\n });\n\n const { coordinate } = useLocation();\n\n //NHCSEARCH-5020 Change Default Sort When Using Points\n const { isMVTVariant, isLoaded: isPointSortMVTLoaded } = useGetMVTSelections({\n agentId: CHANGE_DEFAULT_SORT_WHEN_USING_POINTS?.agentId,\n isProvisional: shouldUsePoints || queryParameters?.redeemPts,\n });\n const isPointsSortMVT = isPointSortMVTLoaded && isMVTVariant?.[VARIANTS.VariantB];\n const initWithPointsSort = isPointsSortMVT && queryParameters?.redeemPts;\n\n const sessionState = getSessionState(isClient);\n\n React.useEffect(() => {\n if (router.isReady && queryParameters && allQuadNodesLoaded.current) {\n const locationCategory = isCategoryAmenity ? categoryId : undefined;\n const newActiveFilterState = initializeActiveFiltersState({\n category: locationCategory,\n queryParameters,\n brandCode,\n sessionFiltersState: sessionState?.activeFilterState,\n });\n newActiveFilterState.showAvailableHotels = false;\n\n dispatch({\n type: 'INITIALIZE_APP',\n payload: {\n boundingBox: initialBounds || initBounds,\n initialHashedHotelSummaryOptionsData: initialHashedHotelData,\n usePoints:\n sessionState.shouldUsePoints !== undefined\n ? sessionState.shouldUsePoints\n : !!queryParameters?.redeemPts,\n hasConnectingRooms: !!queryParameters?.adjoiningRoomStay,\n sortType: initWithPointsSort\n ? SORTBY_DROP_DOWN.POINTS_ASCENDING\n : getSortType(queryParameters?.sortBy, sessionState?.sortType as SortByDropDownValues),\n selectedCurrency: sessionState.selectedCurrency\n ? sessionState.selectedCurrency\n : queryParameters?.displayCurrency || '',\n activeFiltersState: newActiveFilterState,\n brandCode,\n },\n });\n boundsChangeCount.current = 0;\n sendReward(GOALS.LocationsPageLoad);\n }\n }, [router.isReady, allQuadNodesLoaded.current, isCategoryAmenity]);\n\n // conductrics init\n useInitializeConductrics({ authLoading: isAuthLoading, guestInfo, isAuthenticated });\n\n const { isLoaded: isConductricsLoaded } = useConductricsSelection('');\n\n React.useEffect(() => {\n if (!isAuthLoading) {\n metrics.setDreamPageData({\n pageTitle: data?.location?.meta?.pageTitle || document.title,\n brandName: brandName || '',\n brandCode: brandCode || '',\n categoryName: categoryName || '',\n location: {\n type: data?.match?.type,\n typeName: locationMatchName,\n },\n city: data?.match?.address?.city || '',\n country: data?.match?.address?.country || '',\n state: data?.match?.address?.state || '',\n honorsNumber: guestInfo?.hhonors?.hhonorsNumber || '',\n tier: guestInfo?.hhonors?.summary?.tierName || '',\n points: guestInfo?.hhonors?.summary?.totalPoints || 0,\n packages: (guestInfo?.hhonors?.packages as unknown as { packageName: string }[]) || [],\n currencyCode: selectedCurrency || '',\n shouldUsePoints,\n sortBy: sortType || SORTBY_DROP_DOWN.DISTANCE,\n totalSize,\n });\n metrics.setPageData({ page: 'categoryPageView' });\n }\n }, [isAuthLoading, categoryName, brandName]);\n\n React.useEffect(() => {\n router.events.on('routeChangeStart', () => {\n allQuadNodesLoaded.current = true;\n boundsChangeCount.current = 0;\n hasUserZoomed.current = false;\n });\n }, [router.events]);\n\n React.useEffect(() => {\n if (locationPath !== locationQueryPath) {\n setLocationQueryPath(locationPath);\n }\n // update with new bounds for shallow routing\n updateMapBounds({ mapBounds, newBounds: initialBounds, setMapBounds, setMapCenter });\n }, [locationPath, initialBounds]);\n\n // For country/state pages, results should be filtered to only that country/state\n // until the user interacts with the map via pan/zoom (note: resizing the window triggers zoom events)\n const hasUserZoomed = React.useRef(false);\n const hasUserPanned = React.useRef(false);\n const { visibleHotels: preFilteredHotels } = useGetFilteredHotels({\n address: data?.match?.address,\n hasUserPanned: hasUserPanned.current,\n hasUserZoomed: hasUserZoomed.current,\n isLoading: isHotelSummaryOptionsLoading,\n matchName: regionMatchName,\n type: data?.match?.type,\n });\n\n const visibleHotels = preFilteredHotels.filter((hotel) => {\n const currentHotel = hashedHotelSummaryOptionsHotelData?.[hotel];\n if (currentHotel)\n return applyFiltersToHotel({\n amenities: activeFiltersState.amenityFilters,\n attributes: activeFiltersState.attributeFilters,\n brandCodes: activeFiltersState.brandFilters,\n rating: activeFiltersState.ratingsFilter,\n hotel: currentHotel,\n showAvailableHotelsOnly: activeFiltersState.showAvailableHotels,\n hasMPACallResolved: true,\n useLeadPrice: true,\n priceRange: activeFiltersState.priceFilter,\n maxPoints: queryParameters?.maxPoints,\n shouldUsePoints,\n });\n return null;\n });\n\n const handleBoundsChange = React.useCallback(\n debounce((newBounds: google.maps.LatLngBoundsLiteral) => {\n updateMapBounds({\n mapBounds,\n newBounds,\n setMapBounds,\n setMapCenter,\n onBoundsChange: () => {\n boundsChangeCount.current++;\n },\n });\n }, 300),\n [mapBounds, setMapBounds]\n );\n\n React.useEffect(() => {\n if (!isHotelSummaryOptionsLoading) {\n allQuadNodesLoaded.current = true;\n dispatch({\n type: 'UPDATE_HOTELS_IN_BOUNDS',\n payload: {\n boundingBox: mapBounds,\n hashedHotelSummaryOptionsHotelData,\n hasUserZoomed: hasUserZoomed.current,\n },\n });\n }\n }, [\n mapBounds,\n isHotelSummaryOptionsLoading,\n Object.keys(hashedHotelSummaryOptionsHotelData).length,\n ]);\n\n const [srCounter, setSrCounter] = React.useState(1); // set when we want SR to repeat text\n\n const [hotelCountMessage, setHotelCountMessage] = React.useState(() =>\n totalSize > MAX_PROPERTIES_PER_LIST_VIEW_PAGE && isListVisible\n ? t('hotel-counter-text:hotelShowingWithPages', {\n count: totalSize,\n pageStart: 1,\n pageEnd: 20,\n })\n : t('hotel-counter-text:hotelShowingWithCount', { count: totalSize })\n );\n\n const [srHotelCountMessage, setSrHotelCountMessage] = React.useState(() =>\n visibleHotels.length\n ? t('hotel-counter-text:hotelShowingWithCount', { count: totalSize })\n : t('locations-page:notFoundMessage')\n );\n\n const centerCoordinate = React.useMemo(() => {\n if (data?.location?.globalBounds) {\n if (mapCenter?.lat !== undefined && mapCenter?.lng !== undefined && !hasUserZoomed.current) {\n return mapCenter;\n } else if (coordinate?.latitude !== undefined && coordinate?.longitude !== undefined) {\n return { lat: coordinate.latitude, lng: coordinate.longitude };\n }\n } else if (shouldUseParamCoords) {\n return {\n lat: queryParameters?.coords?.latitude || 0,\n lng: queryParameters?.coords?.longitude || 0,\n };\n }\n return {\n lat: data?.match?.geometry?.location.latitude || 0,\n lng: data?.match?.geometry?.location.longitude || 0,\n };\n }, [\n data?.location?.globalBounds,\n coordinate?.latitude,\n coordinate?.longitude,\n data?.match?.geometry?.location.latitude,\n data?.match?.geometry?.location.longitude,\n shouldUseParamCoords,\n mapCenter?.lat,\n mapCenter?.lng,\n ]);\n\n const allHotelsSorted = useSortHotels(\n sortType,\n brandCode || '',\n Object.values(hashedHotelSummaryOptionsHotelData),\n centerCoordinate\n );\n\n const visibleHotelsSet = new Set(visibleHotels);\n const visibleSortedHotels = allHotelsSorted.filter((hotel) =>\n visibleHotelsSet.has(hotel.ctyhocn)\n );\n const onPageChanged = React.useCallback(\n (pageIndex: number, pageSize: number) => {\n const count = !isInitialRender.current ? visibleHotels.length : totalSize;\n const pageStart = pageIndex * pageSize + 1;\n const pageEnd = Math.min(count, pageIndex * pageSize + pageSize);\n\n const message =\n count > pageSize && isListVisible\n ? t('hotel-counter-text:hotelShowingWithPages', {\n count,\n pageStart,\n pageEnd,\n })\n : t('hotel-counter-text:hotelShowingWithCount', { count });\n const srMessage = count === 0 ? t('locations-page:notFoundMessage') : message;\n setHotelCountMessage(message);\n setSrHotelCountMessage(srMessage);\n },\n [isGlobalPage, sortType, isInitialRender.current, totalSize, visibleHotels]\n );\n\n React.useEffect(() => {\n let interval: ReturnType<typeof setInterval>;\n if (isHotelSummaryOptionsLoading) {\n interval = setInterval(() => setSrCounter(srCounter + 1), 3000);\n } else {\n setSrCounter(0);\n }\n return () => clearInterval(interval);\n }, [isHotelSummaryOptionsLoading, srCounter]);\n\n // Metadata information\n const seoSchema = getSeoSchema({\n breadcrumbs: data?.location?.breadcrumbs,\n baseUrl: env.OHW_BASE_URL,\n language: router.locale as string,\n hotels: visibleSortedHotels,\n amenities: data?.hotelSummaryOptions?.amenities,\n });\n\n const handleFilterChange = React.useCallback(\n (newActiveFiltersState: Partial<ActiveFiltersState>) => {\n //if this is a category page re-run location page query using base path w/out category param\n if (\n !isInitialRender.current &&\n data?.location?.category &&\n !isEqual(newActiveFiltersState, activeFiltersState)\n ) {\n //THIS IS A HACK FOR 3398 UNTIL WE IMPLEMENT BRAND TICKET FIX. If basepath is locations do not update the locationQueryPath as this nulls out the entire return of query.\n if (data?.location.paths?.base !== 'locations/') {\n setLocationQueryPath(data?.location.paths?.base || '');\n }\n }\n\n dispatch({\n type: 'APPLY_FILTERS_TO_HOTELS_IN_BOUNDS',\n payload: {\n activeFiltersState: newActiveFiltersState,\n useLeadPrice: true,\n brandCode,\n },\n });\n },\n [activeFiltersState, brandCode, data?.location?.category, data?.location.paths?.base, dispatch]\n );\n\n const handleFilterReset = () => {\n //if this is a category page re-run location page query using base path w/out category param\n if (!isInitialRender.current && data?.location?.category) {\n //HACK: THIS IS A HACK FOR 3398 UNTIL WE IMPLEMENT BRAND TICKET FIX. If basepath is locations do not update the locationQueryPath as this nulls out the entire return of query.\n if (data?.location.paths?.base !== 'locations/') {\n setLocationQueryPath(data?.location.paths?.base || '');\n }\n }\n };\n const pageInterlinks = data?.location.pageInterlinks;\n\n const { isDesktopListVisible, isDesktopMapView } = useMapListToggle();\n\n /* NHCSEARCH-5451 Vertical Space MVT */\n const {\n isCurrencyAndSortInAllFiltersModal,\n isFilterAndSortInAccordion,\n isSuggestedFiltersInHorizontalScroll,\n filterAndSortLabel,\n isVerticalSpaceVar8,\n } = useVerticalSpaceMVT();\n const sortAndFiltersContent = (\n <div\n className={cx('flex items-center', {\n 'flex-wrap': !isSuggestedFiltersInHorizontalScroll,\n ' max-md:px-4 md:-mx-3 ': isVerticalSpaceVar8,\n ' 2xl:px-1': isSuggestedFiltersInHorizontalScroll,\n })}\n >\n {isCurrencyAndSortInAllFiltersModal ? null : (\n <div\n className={cx('flex items-end lg:items-center', {\n 'flex-wrap': !isSuggestedFiltersInHorizontalScroll,\n })}\n >\n <SortByDropDown />\n <CurrencyConverter />\n </div>\n )}\n <UsePoints />\n <CompareHotelsToggle />\n <Filters\n amenities={data?.hotelSummaryOptions?.amenities}\n amenityCategories={data?.hotelSummaryOptions?.amenityCategories}\n brands={data?.hotelSummaryOptions?.brands}\n filteredHotelCount={visibleHotels.length}\n onFilterChange={handleFilterChange}\n onResetFilters={() => handleFilterReset()}\n showSaleFilter={false}\n />\n {isSuggestedFiltersInHorizontalScroll ? (\n <div className=\"ml-1 border-l-2 border-border pl-1\">\n <SuggestedFilterButtons\n amenities={data?.hotelSummaryOptions?.amenities}\n isConductricsLoaded={isConductricsLoaded}\n isFindingHotels={isHotelSummaryOptionsLoading || isLocationPageHSOLoading}\n onFilterCriteriaChange={(activeFiltersState: ActiveFiltersState) => {\n handleFilterChange(activeFiltersState);\n }}\n visibleHotels={visibleHotels}\n matchId={data?.match?.id}\n />\n </div>\n ) : null}\n </div>\n );\n const sortAndFilters = isSuggestedFiltersInHorizontalScroll ? (\n <TaxonomyList\n labelledBy={filterAndSortLabel}\n name={filterAndSortLabel}\n containerClassname=\"overflow-hidden -my-2\"\n >\n {sortAndFiltersContent}\n </TaxonomyList>\n ) : (\n sortAndFiltersContent\n );\n\n return (\n <>\n <MetaData\n brandCode={brandCode || 'WW'}\n description={data?.location?.meta?.description || ''}\n pageTitle={data?.location?.meta?.pageTitle || ''}\n path={router.asPath.replace(/^\\/[a-z]{2}\\//i, '/').replace(/\\/$/, '')}\n seoSchema={seoSchema}\n isGlobalBounds={!!data?.location?.globalBounds}\n locationPageMatchType={data?.match?.type}\n />\n <SearchHeader brandCode={brandCode} brandName={brandName} isFluid />\n <main role=\"main\">\n <div className={cx('container-fluid mb-4', {})}>\n <div className=\"flex flex-col\">\n <div className=\"mt-4 flex flex-col\">\n <div className=\"mt-2 flex-initial md:mt-0\">\n <Breadcrumbs breadcrumbs={data?.location?.breadcrumbs || []} />\n </div>\n </div>\n\n <div className=\"my-2 mt-4 border-t border-border-alt py-2 md:mb-0\">\n <PlacesSearch\n brandCode={brandCode || ''}\n ctaText={t('locations-page:update')}\n hasShallowRoutingEnabled={true}\n matchId={data?.match?.id}\n />\n </div>\n </div>\n <div className=\"mb-4 border-b-4 border-hilton-alt pb-4\">\n {/* NHCSEARCH-5451 Vertical Space MVT */}\n {isFilterAndSortInAccordion ? (\n <Accordion\n className=\"accordion-single hover:text-primary-alt\"\n items={[\n {\n collapsedButtonLabel: filterAndSortLabel,\n expandedButtonLabel: filterAndSortLabel,\n expandedClassName: 'mb-3 lg:mb-4',\n key: filterAndSortLabel,\n content: sortAndFilters,\n },\n ]}\n type=\"single\"\n />\n ) : (\n sortAndFilters\n )}\n </div>\n <div\n className={cx('relative grid grid-cols-1', {\n 'md:grid-cols-[max-content_1fr] md:gap-4': isDesktopListVisible,\n 'w-full': isDesktopMapView,\n })}\n >\n <div\n style={{ minHeight: '100vh' }}\n className={cx({\n 'z-1 bg-bg relative h-auto max-md:w-full md:static md:max-w-[440px] lg:w-[694px] lg:max-w-[694px] xl:w-[888px] xl:max-w-[888px]':\n isListVisible,\n 'max-sm:z-0 hidden': !isListVisible,\n })}\n >\n <HotelSearchResultSummaryPanel\n amenities={data?.hotelSummaryOptions?.amenities}\n customCounterMessage={hotelCountMessage}\n customCounterSRMessage={srHotelCountMessage}\n hotelCount={visibleSortedHotels.length}\n isFindingHotels={isHotelSummaryOptionsLoading || isLocationPageHSOLoading}\n isConductricsLoaded={isConductricsLoaded}\n matchId={data?.match?.id}\n onFilterChange={(activeFiltersState: ActiveFiltersState) =>\n handleFilterChange(activeFiltersState)\n }\n pageHeading1Title={data?.location?.title}\n visibleHotels={visibleHotels}\n showingHotelDivRef={hotelCounterRef}\n />\n\n <div className=\"md:sticky md:top-0\">\n <ListView\n brandCode={brandCode || ''}\n brandName={brandName}\n centerCoordinate={centerCoordinate}\n isConductricsLoaded={true}\n onPageChanged={onPageChanged}\n sortedHotels={visibleSortedHotels}\n isHSODataLoading={isHotelSummaryOptionsLoading || isLocationPageHSOLoading}\n initHotelCount={initHotelCount ?? 0}\n />\n <AboutLocationsPage\n about={data?.location?.about}\n aboutClassName=\"px-0 py-3\"\n contentBlockClassName=\"py-1\"\n descriptionClassName=\"px-0 pb-1 text-xs\"\n />\n {pageInterlinks &&\n pageInterlinks?.length > 0 &&\n pageInterlinks?.map(\n (linkItem: LocationPageInterlink, index: React.Key | null | undefined) => (\n <Interlinks\n index={`${index}`}\n interlinkTitle={linkItem?.title || ''}\n interlinks={linkItem?.links}\n key={linkItem?.title || `title-${linkItem.links[0]?.name ?? index}`}\n />\n )\n )}\n <div>\n <p className=\"p-8 text-xs\" data-testid=\"rateLegalDisclosure\">\n {shouldUsePoints\n ? t('locations-page:pointsLegalDisclaimer')\n : t('locations-page:legalDisclaimer')}\n </p>\n </div>\n </div>\n </div>\n\n <MapBlock\n showSpinner={isHotelSummaryOptionsLoading}\n visibleFilteredInBoundHotels={visibleHotels}\n handleBoundsChange={handleBoundsChange}\n hasUserPanned={hasUserPanned}\n hasUserZoomed={hasUserZoomed}\n initialBounds={initialBounds || initBounds}\n filterChange={handleFilterChange}\n isFindingHotels={isHotelSummaryOptionsLoading}\n hotelCounterRef={hotelCounterRef}\n pageHeading1Title={data?.location?.title}\n centerCoordinate={centerCoordinate}\n amenities={data?.hotelSummaryOptions?.amenities}\n matchId={data?.match?.id}\n counterMessage={{\n customCounterMessage: hotelCountMessage,\n customCounterSRMessage: srHotelCountMessage,\n }}\n />\n </div>\n </div>\n </main>\n <div className={cx({ 'mt-10 md:mt-0': !isListVisible })}>\n <Footer isFluid />\n </div>\n <CompareBar\n centerCoordinate={centerCoordinate}\n onStopCompare={() => hotelCounterRef?.current?.focus()}\n />\n {/* Hotel details Panel */}\n {!!selectedCtyhocn ? <HotelDetails /> : null}\n </>\n );\n};\n","export * from './locations-page';\n","import { LocationsPage } from '../../../components/locations-page';\nimport type { GetServerSidePropsContext } from 'next';\nimport { TransactionViewWrapper } from '../../../components/view-transactions/transactions-view-wrapper';\nimport { getServerSideClients, getServerSideSafeLanguage } from '@dx-ui/framework-react-query';\nimport { AppProvider } from '../../../providers/app-provider';\nimport {\n COMMON_NAMESPACES,\n FEATURE_TOGGLES,\n LOCATIONS_NAMESPACES,\n REACT_QUERY_CONFIG,\n SEARCH_NAMESPACES,\n} from '../../../constants';\nimport {\n serverSideAllRegionsQuery,\n serverSideFeatureToggles_FeatureConfigsQuery,\n} from '@dx-ui/queries-dx-shop-search-ui';\nimport type { HotelSummaryOptions_GeocodePageQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { getUrlParamsString } from '../../../utils';\nimport {\n getCustomHeaders,\n serverSideGeocodePageHotelSummaryData,\n serverSideProps,\n} from '../../../utils/serverSideProps';\nimport { FilterProvider } from '../../../providers/filter-provider';\n\ntype LocationsPageProps = {\n pageData: HotelSummaryOptions_GeocodePageQuery['geocodePage'];\n path: string;\n isOneLink: boolean;\n};\n\nexport default function Locations({ pageData, path, isOneLink }: LocationsPageProps) {\n // If bounds are available on hotelSummaryOptions (the expanded bounding box), then use it. Othwise use standard bounds.\n const bounds = pageData?.hotelSummaryOptions?.bounds || pageData?.match?.geometry?.bounds;\n\n const initialBounds = {\n south: bounds?.southwest.latitude || 80,\n west: bounds?.southwest.longitude || -160,\n north: bounds?.northeast.latitude || 80,\n east: bounds?.northeast.longitude || 160,\n };\n\n return (\n <FilterProvider>\n <AppProvider\n initialHotelSummaryOptionsData={pageData as HotelSummaryOptions_GeocodePageQuery}\n isOneLink={isOneLink}\n >\n <LocationsPage initialBounds={initialBounds} path={path} />\n <TransactionViewWrapper />\n </AppProvider>\n </FilterProvider>\n );\n}\n\nexport const getServerSideProps = async (context: GetServerSidePropsContext) => {\n const { resolvedUrl, res, params } = context;\n const locale = getServerSideSafeLanguage(context);\n // For dynamic routing all the path slugs will be in a single array on ctx.query called slug. We joined them together with / in order to pass to core+\n const locationPath = (params?.slug as string[])?.join('/') || '';\n const path = ['locations', locationPath].join('/').replace(/\\/+/g, '/');\n\n const customHeaders = getCustomHeaders(context);\n const { authClient, queryClient } = getServerSideClients({\n ...REACT_QUERY_CONFIG,\n customHeaders,\n response: res,\n language: locale,\n });\n const serverSideRulesAndToggles = await serverSideFeatureToggles_FeatureConfigsQuery(\n queryClient,\n {\n names: FEATURE_TOGGLES,\n }\n ).catch((e) => {\n console.log(`Error in serverSideFeatureToggles_FeatureConfigsQuery: ${e}`); // eslint-disable-line no-console\n return null;\n });\n\n if (!serverSideRulesAndToggles) {\n return { notFound: true };\n }\n const hotelSummaryData = await serverSideGeocodePageHotelSummaryData({\n path,\n queryClient,\n locale,\n url: resolvedUrl,\n }).catch((e) => {\n console.log(`Error in serverSideGeocodePageHotelSummaryData: ${e}`); // eslint-disable-line no-console\n return null;\n });\n\n if (!hotelSummaryData) {\n return { notFound: true };\n }\n\n const pageData = hotelSummaryData?.geocodePage;\n\n // perform redirect if match is null and query is complete using canconical url\n if (!pageData?.match) {\n //first check if a valid canonical uri is returned. If not then something went wrong. 404\n if (!pageData?.location?.uri) {\n return { notFound: true };\n }\n const urlParams = getUrlParamsString(locale, resolvedUrl);\n return {\n redirect: {\n destination: `/${locale}/${pageData?.location?.uri}${urlParams}`,\n permanent: true,\n },\n };\n }\n\n return serverSideProps({\n authClient,\n context,\n queryClient,\n namespaces: [...COMMON_NAMESPACES, ...LOCATIONS_NAMESPACES, ...SEARCH_NAMESPACES],\n pageProps: {\n customHeaders,\n pageData,\n path,\n },\n getServerSideQueries({ queryClient }) {\n return [\n serverSideAllRegionsQuery(queryClient, { language: 'en' }).catch((e) => {\n console.log(`Error in serverSideAllRegionsQuery: ${e}`); // eslint-disable-line no-console\n return null;\n }),\n ];\n },\n });\n};\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"about-locations-page_container__GUw4u\"};","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n"],"names":["Breadcrumbs","breadcrumbs","rest","t","useTranslation","length","nav","aria-label","data-testid","ol","className","map","breadcrumb","idx","isLastBreadcrumb","li","a","aria-current","href","uri","name","span","aria-hidden","router","useWrappedRouter","breadCrumbs","bc","locale","OSCBreadCrumbs","AboutLocationsPage","about","aboutClassName","contentBlockClassName","descriptionClassName","titleClassName","descIndex","orderedListIndex","unOrderedListIndex","contentBlocks","div","cx","styles","title","contentBlock","dangerouslySetInnerHTML","__html","descriptions","description","orderedList","unorderedList","getImageUrl","image","ratios","url","getOptimizedImages","variants","getHotelSeoImages","hotelImages","imagesWanted","primaryImages","Array","isArray","carousel","slice","master","getTopThreeAmenities","hotel","amenities","topAmenities","amenity","amenityIds","includes","id","push","SEO_AMENITIES","getSeoSchema","baseUrl","language","hotels","breadcrumbItemListElements","index","position","item","hotelItemListElements","filter","getLeadRateAvailStatus","display","leadRate","images","SEO_IMAGES","offers","price","lowest","rateAmount","priceCurrency","localization","currencyCode","amenityFeature","facilityOverview","homeUrlTemplate","JSON","stringify","itemListElement","worker","Interlinks","interlinks","interlinkTitle","metrics","useMetrics","handleInterlinkMetricsOnClick","data","indexOf","substring","formattedLinkItemName","split","trackInterlinksTitleClick","linkItemName","interLinkTitle","h3","Accordion","items","key","content","section","location_interlinks","linkItem","env","OHW_BASE_URL","onClick","collapsedButtonLabel","expandedButtonLabel","type","variant","defaultDreamPageAttibutes","categoryId","undefined","categoryName","isCategoryAmenity","isGlobalPage","isResortPage","useGetDreamPageAttributes","dreamPageAttributesConfig","useFeatureToggleConfig","safeQueryParams","queryParameters","dispatch","useAppDispatch","dreamPageAttributes","useMemo","pageAttributes","globalBounds","enabled","category","activeFiltersState","amenityFilters","dreamAttributes","Object","values","config","categoryOrAmenity","find","pluralDisplay","singularDisplay","useEffect","pageType","getPageType","asPath","isGlobal","isResorts","isBrand","brandCode","payload","Worker","URL","useSortHotels","sortType","centerCoordinate","sortedHotels","setSortedHotels","useState","fetchData","postMessage","handleMessage","event","addEventListener","removeEventListener","sortHotels","e","console","error","LocationsPage","initialBounds","initBounds","path","selectedCtyhocn","selectedCurrency","isListVisible","shouldUsePoints","useAppState","useFilterState","isClient","useIsClient","shouldUseParamCoords","useCoordsFromParams","locationQueryPath","setLocationQueryPath","React","guestInfo","isLoading","isAuthLoading","isAuthenticated","useAuth","locationPath","bounds","isLocationPageHSOLoading","initHotelCount","locationMatchName","regionMatchName","useGetDreamPageData","blobPocToggleEnabled","location","brandName","hotelSummaryOptions","brands","brand","code","totalSize","_hotels","initialHashedHotelData","hashHotelSummaryOptionsData","mapBounds","setMapBounds","mapCenter","setMapCenter","isInitialRender","allQuadNodesLoaded","boundsChangeCount","hotelCounterRef","useRef","isCountryOrState","match","hashedHotelSummaryOptionsHotelData","isFetching","isHotelSummaryOptionsLoading","useHotelSummaryOptions","initialHashedHotelSummaryOptionsData","isPageBrandFilterEnabled","address","current","matchName","blobEnabled","hotelSummaryExtractUrl","coordinate","useLocation","isMVTVariant","isLoaded","isPointSortMVTLoaded","useGetMVTSelections","agentId","CHANGE_DEFAULT_SORT_WHEN_USING_POINTS","isProvisional","redeemPts","initWithPointsSort","VARIANTS","VariantB","sessionState","getSessionState","isReady","newActiveFilterState","initializeActiveFiltersState","locationCategory","sessionFiltersState","activeFilterState","showAvailableHotels","boundingBox","usePoints","hasConnectingRooms","adjoiningRoomStay","SORTBY_DROP_DOWN","POINTS_ASCENDING","getSortType","sortBy","displayCurrency","sendReward","GOALS","LocationsPageLoad","useInitializeConductrics","authLoading","isConductricsLoaded","useConductricsSelection","setDreamPageData","pageTitle","meta","document","typeName","city","country","state","honorsNumber","hhonors","hhonorsNumber","tier","summary","tierName","points","totalPoints","packages","DISTANCE","setPageData","page","events","on","hasUserZoomed","updateMapBounds","newBounds","hasUserPanned","visibleHotels","preFilteredHotels","useGetFilteredHotels","currentHotel","applyFiltersToHotel","attributes","attributeFilters","brandCodes","brandFilters","rating","ratingsFilter","showAvailableHotelsOnly","hasMPACallResolved","useLeadPrice","priceRange","priceFilter","maxPoints","handleBoundsChange","debounce","onBoundsChange","keys","srCounter","setSrCounter","setHotelCountMessage","MAX_PROPERTIES_PER_LIST_VIEW_PAGE","count","pageStart","pageEnd","srHotelCountMessage","setSrHotelCountMessage","lat","lng","latitude","longitude","coords","geometry","allHotelsSorted","visibleHotelsSet","Set","visibleSortedHotels","has","ctyhocn","onPageChanged","pageIndex","pageSize","Math","min","message","srMessage","interval","setInterval","clearInterval","seoSchema","handleFilterChange","newActiveFiltersState","isEqual","paths","base","handleFilterReset","pageInterlinks","isDesktopListVisible","isDesktopMapView","useMapListToggle","isCurrencyAndSortInAllFiltersModal","isFilterAndSortInAccordion","isSuggestedFiltersInHorizontalScroll","filterAndSortLabel","isVerticalSpaceVar8","useVerticalSpaceMVT","sortAndFiltersContent","SortByDropDown","CurrencyConverter","UsePoints","CompareHotelsToggle","Filters","amenityCategories","filteredHotelCount","onFilterChange","onResetFilters","showSaleFilter","SuggestedFilterButtons","isFindingHotels","onFilterCriteriaChange","matchId","sortAndFilters","TaxonomyList","labelledBy","containerClassname","MetaData","replace","isGlobalBounds","locationPageMatchType","SearchHeader","isFluid","main","role","PlacesSearch","ctaText","hasShallowRoutingEnabled","expandedClassName","style","minHeight","HotelSearchResultSummaryPanel","customCounterMessage","hotelCountMessage","customCounterSRMessage","hotelCount","pageHeading1Title","showingHotelDivRef","ListView","isHSODataLoading","links","p","MapBlock","showSpinner","visibleFilteredInBoundHotels","filterChange","counterMessage","Footer","CompareBar","onStopCompare","focus","HotelDetails","Locations","pageData","isOneLink","south","southwest","west","north","northeast","east","FilterProvider","AppProvider","initialHotelSummaryOptionsData","TransactionViewWrapper"],"sourceRoot":"","ignoreList":[6,15,16,18,19]}